package com.one.group.service;

import com.mybatisflex.core.service.IService;
import com.one.group.model.dto.QuestionDto;
import com.one.group.model.entity.Question;
import com.one.group.model.vo.QuestionDetailVo;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 问题服务接口
 * @author kld
 */
public interface QuestionService extends IService<Question> {
    
    /**
     * 新增问题及选项
     * @param addDto 问题添加DTO
     * @return 是否添加成功
     */
    @Transactional(rollbackFor = Exception.class)
    boolean addQuestion(QuestionDto addDto);
    
    /**
     * 获取问题详情
     * @param questionId 问题ID
     * @return 问题详情
     */
    QuestionDetailVo getQuestionDetail(Long questionId);
    
    /**
     * 更新问题及选项
     * @param questionId 问题ID
     * @param addDto 问题添加DTO
     * @return 是否更新成功
     */
    @Transactional(rollbackFor = Exception.class)
    boolean updateQuestion(Long questionId, QuestionDto addDto);
    
    /**
     * 根据问卷ID查询所有问题
     * @param questionnaireId 问卷ID
     * @return 问题列表
     */
    List<QuestionDetailVo> getQuestionsByQuestionnaireId(Long questionnaireId);
    
    /**
     * 删除问题及相关选项
     * @param questionId 问题ID
     * @return 是否删除成功
     */
    @Transactional(rollbackFor = Exception.class)
    boolean deleteQuestion(Long questionId);
    
    /**
     * 删除问题选项
     * @param optionId 选项ID
     * @return 是否删除成功
     */
    boolean deleteOption(Long optionId);
    
    /**
     * 根据问卷ID对问题进行排序
     * @param questionnaireId 问卷ID
     * @return 是否排序成功
     */
    boolean batchUpdateQuestionSort(Long questionnaireId);
    
}